<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>珠峰</title>
</head>
<body>
    <script>
        //async 修饰符，可以让一个普通函数返回的结果变为Promise实例(它更重要的作用是结合await来处理)
        // function func(){
        //     // return 10;
        //     return new Promise(resolve=>{
        //         resolve(10);
        //     })
        // }
        // async function func(){
        //      return 10;
            
        // }
        // func().then(result=>{
        //     console.log(result);
        // })
    
        // function func1(){
        //     return new Promise(resolve=>{
        //         setTimeout(()=>{
        //             resolve(1);
        //         },1000)
        //     })
        // }
        // function func2(){
        //     return new Promise(resolve=>{
        //         setTimeout(()=>{
        //             resolve(2);
        //         },1000)
        //     })
        // }
        // function func3(){
        //     return new Promise(resolve=>{
        //         setTimeout(()=>{
        //             reject(3);
        //         },1000)
        //     })
        // }
        // 需求；异步串行 func1先执行（等待1s),成功后执行func2(等待1s),,成功后执行func2(等待1s),成功后输出‘ok'
        // function func(){
        //     func1().then(result=>{
        //         console.log(`第一个函数,${result}`);
        //         return func2();
        //     }).then(result=>{
        //         console.log(`第二个函数,${result}`);
        //         return func3();
        //     }).then(result=>{
        //         console.log('ok')
        //     }).catch(reason=>{
        //         console.log('No');
        //     })
        // }


         async function func1(){
            return new Promise(resolve=>{
                setTimeout(()=>{
                    resolve(1);
                },1000)
            })
        }
        async function func2(){
            return new Promise(resolve=>{
                setTimeout(()=>{
                    resolve(2);
                },1000)
            })
        }
        async function func3(){
            return new Promise(resolve=>{
                setTimeout(()=>{
                    reject(3);
                },1000)
            })
        }
        let result1=await func1();
        //只有await后面的promise实例的状态变为成功，我们把promise的value值赋值给
        // result1,然后才会执行下面的代码
        console.log(result1);
        let result2=await func2();
        console.log(result2);
        let result3=await func3();
        // await 只有在promise实例是成功的时候才会继续执行下面的代码，如果Promise实例状态为失败，下面代码不会再执行
        // （报错，Uncaught (in promise))
        console.log(result3);
        func();
    </script>
</body>
</html>

